package zuo.middleLevel_5;

import java.util.ArrayList;

/**
 * @Author: Forx
 * @Data: 2021/6/24
 * @Desc: Algorithm - zuo.middleLevel_5
 * @Version: v1.0
 */
public class ML5 {
    /**
     *
     * 实现一个栈,有pop,push,getMin
     *
     * 可以自己用数组实现一个栈
     * */
    public static class MyStack{
        private ArrayList<Integer> stack;
        private int minIndex;
        private int topIndex;

        public MyStack(int stackSize) {
            stack = new ArrayList<>(stackSize);
            topIndex = -1;
            minIndex = -1;
        }
        public void push(int elm){
            if(stack.isEmpty()){
                topIndex = 0;
                minIndex = 0;
                stack.add(elm);
            }else {

            }
        }
        public int pop(){
            return 0;
        }
        public int getMin(){
            return 0;
        }
    }

    /**
     * dp数组空间压缩
     * 就是利用行与行之间的关系
     * 实现行的动态更新
     * */
    /**
     *
     * */
    /**
     * 如何将数组切分使得左边最大值减去右边的最大值的绝对值最大
     *
     * 先全局遍历一遍数组,得到全局最大值,
     * 假设把全局最大值划分到右边,那就是如何让左边最大值最小,答案就是只左边拥有一个元素
     * */
    /**
     * str:abcd则 bcda cdab dabc都称作str的旋转词
     * 写出来一个函数判断str2是否是str1的旋转词
     *
     * 判断str2是不是str1+str1的子串即可
     * */
    /**
     * 给定一个数组arr,其中的值代表咖啡机冲咖啡的时间,
     * 第二个参数n,代表有多少人和咖啡,每人喝一杯
     * 第三个参数a,代表洗咖啡杯的时间,只有一个洗杯子的机器
     * 第四个参数b,不用洗咖啡被子,自动挥发需要的时间
     *
     * 输出从开始泡第一杯咖啡开始到最后所有的杯子都干净需要多长时间
     *
     * */
    /**
     * 给定一个数组,能否通过调整做到相领两数想成是4的倍数
     *
     * 统计三种数,一种是奇数个数a,一种是只有一个2因子的数个数b,和大于一个2因子的数个数c
     *  a=0的情况c>=b,一定true
     *  a=0 , c<b, b-c为偶数就行,否则是false
     *  b=0,c>=a,true
     *  b=0,c<a,false
     *  c=0,b是奇数,false
     *  c=0,b是偶数,false
     *  均不等于0的情况下
     *  c>a,b是偶数
     *
     * */
}
